/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.geftu.util;

import br.com.geftu.model.Modulo;
import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;

/**
 *
 * @author jorgenei
 */
public class ModuloTableModel extends AbstractTableModel {  
  
    private static final long serialVersionUID = 1L;  
  
    /* Lista de Modulo que representam as linhas. */  
    private List<Modulo> linhas;  
  
    /* Array de Strings com o nome das colunas. */  
    private String[] colunas = new String[]{  
        "ID","Módulo", "Release","Alterado"};  
  
  
  
    /* Cria um ModuloTableModel vazio. */  
    public ModuloTableModel() {  
        linhas = new ArrayList<Modulo>();  
    }  
  
    /* Cria um ModuloTableModel carregado com 
     * a lista de Modulo especificada. */  
    public ModuloTableModel(List<Modulo> listaDeModulo) {  
        linhas = new ArrayList<Modulo>(listaDeModulo);  
    }  
  
  
    /* Retorna a quantidade de colunas. */  
    @Override  
    public int getColumnCount() {  
        // EstÃ¡ retornando o tamanho do array "colunas".  
        return colunas.length;  
    }  
  
    /* Retorna a quantidade de linhas. */  
    @Override  
    public int getRowCount() {  
        // Retorna o tamanho da lista de Modulo.  
        return linhas.size();  
    }  
  
  
    @Override  
    public String getColumnName(int columnIndex) {  
        // Retorna o conteÃºdo do Array que possui o nome das colunas  
        return colunas[columnIndex];  
    }  
  
    ;  
  
    @Override  
    public Class<?> getColumnClass(int columnIndex) {  
        return String.class;  
    }  
  
    ;  
  
  
    @Override  
    public Object getValueAt(int rowIndex, int columnIndex) {  
            Modulo modulo = linhas.get(rowIndex);  
  
        // Retorna o campo referente a coluna especificada.  
        // Aqui é feito um switch para verificar qual é a coluna  
        // e retornar o campo adequado. As colunas são as mesmas  
        // que foram especificadas no array "colunas".  
        switch (columnIndex) {  
  
            // Seguindo o exemplo: "Tipo","Data de Cadastro", "Nome", "Idade"};  
            case 0:  
                return modulo.getIdmod();  
            case 1:  
                return modulo.getModulo();  
            case 2:  
                return modulo.getRelease();  
            case 3:  
                return modulo.getDtalteracao();                 
            case 4:  
                return modulo.getProjeto();                 
            default:  
                // Isto não deveria acontecer...  
                throw new IndexOutOfBoundsException("columnIndex out of bounds");  
        }  
    }  
  
@Override  
//modifica na linha e coluna especificada  
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {  
      Modulo modulo = linhas.get(rowIndex); // Carrega o item da linha que deve ser modificado  
  
     switch (columnIndex) { // Seta o valor do campo respectivo  
         case 0:  
             modulo.setModulo(aValue.toString());  
         case 1:  
             modulo.setRelease(aValue.toString());  
         case 2:  
             modulo.setDtalteracao(aValue.toString());  
         case 3:  
             modulo.setProjeto(null);               
  
         default:  
             // Isto não deveria acontecer...               
     }  
     fireTableCellUpdated(rowIndex, columnIndex);  
     }  
  
    //modifica na linha especificada  
    public void setValueAt(Modulo aValue, int rowIndex) {  
        Modulo modulo = linhas.get(rowIndex); // Carrega o item da linha que deve ser modificado  
  
        modulo.setModulo(aValue.getModulo());  
        modulo.setRelease(aValue.getRelease());  
        modulo.setDtalteracao(aValue.getDtalteracao());  
        modulo.setProjeto(null);
  
        fireTableCellUpdated(rowIndex, 0);  
        fireTableCellUpdated(rowIndex, 1);  
        fireTableCellUpdated(rowIndex, 2);  
        fireTableCellUpdated(rowIndex, 3);  
  
    }  
    ;  
  
  
    ;  
  
  
    @Override  
    public boolean isCellEditable(int rowIndex, int columnIndex) {  
        return false;  
    }  
  
  
    public Modulo getModulo(int indiceLinha) {  
        return linhas.get(indiceLinha);  
    }  
  
  
  
    /* Adiciona um registro. */  
    public void addModulo(Modulo m) {  
        int tamanhoAntigo = getRowCount()-1;
        // Adiciona o registro.  
        linhas.add(m);  
  
  
        //int ultimoIndice = getRowCount() - 1;  
        
        fireTableRowsInserted(tamanhoAntigo, getRowCount() - 1); 
        isCellEditable(getRowCount()-1, getColumnCount());
  
        //fireTableRowsInserted(ultimoIndice, ultimoIndice);  
    }  
  
    /* Remove a linha especificada. */  
    public void removeModulo(int indiceLinha) {  
        linhas.remove(indiceLinha);  
  
        fireTableRowsDeleted(indiceLinha, indiceLinha);  
    }  
    
    
    /* Adiciona uma lista de Modulo ao final dos registros. */  
    public void addListaDeModulo(List<Modulo> modulo) {  
        // Pega o tamanho antigo da tabela.  
        int tamanhoAntigo = getRowCount()-1;  
  
        // Adiciona os registros.  
        linhas.addAll(modulo);  
  
        fireTableRowsInserted(tamanhoAntigo, getRowCount() - 1);  
    }  
  
    /* Remove todos os registros. */  
    public void limpar() {  
        linhas.clear();  
  
  
        fireTableDataChanged();  
    }  
  
    /* Verifica se este table model esta vazio. */  
    public boolean isEmpty() {  
        return linhas.isEmpty();  
    }  
  
  
  
}  